﻿using System;
using System.ComponentModel;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using System.Globalization;
using Sinacor.UI.Bovespa.Ordens.Communication;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Calendario.Calendario;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem;
using System.Collections.Generic;

namespace Sinacor.UI.Bovespa.Ordens.Presenter
{
    public class OrdensNegociosPresenter : BasePresenter<IBaseView>
    {
        #region Campos

        private IOrdensNegocios _view;
        private Sinacor.UI.Bovespa.Ordens.Communication.Calendario _comunicacaoCalendario;
        private Ordem _comunicacaoOrdem;
        private Communication.Negocio _comunicacaoNegocio;

        #endregion

        #region Constantes

        public const int ErrNotFound = 103194;

        #endregion

        #region Construtor

        public OrdensNegociosPresenter(IOrdensNegocios view)
            : base((IBaseView)view)
        {
            this._view = view;
        }

        #endregion

        #region CarregarGridNegocios

        public void CarregarNegocios(Model.ConsultaOrdensNegocios model)
        {
            ModelCollection<Model.Negocio> retorno = null;
            ConsultarNegociosRequest request = new ConsultarNegociosRequest();
            Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento tipoOrdem = new Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento();
            try
            {
                this._comunicacaoNegocio = new Negocio(this.Session);
                switch (model.TipoSituacao)
                {
                    case Model.Enum.TipoSituacaoOrdem.Casadas:
                        tipoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Casadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.CasadasParte:
                        tipoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.CasadasParte;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.ExecutadasSemClientes:
                        tipoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.ExecutadasSemClientes;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                        tipoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.NaoCasadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.Todas:
                        tipoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Todas;
                        break;
                }
                request.Bolsa = model.Bolsa;
                request.DataPregao = Convert.ToDateTime(model.DataPregao);
                request.Titulo = new TituloRequest();
                request.Titulo.Codigo = model.Titulo;
                request.TipoSituacaoCasamentoOrdem = tipoOrdem;

                retorno = this._comunicacaoNegocio.ConsultarNegociosModel(request);

                if (retorno != null && retorno.Count > 0)
                {
                    this._view.ExibirNegocios(retorno);
                }
                else
                {
                    this._view.ExibirMensagem(Model.Enum.TipoConsultaOrdemNegocio.Negocios);
                    this._view.LimparGridNegocios();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region CarregarGridOrdens

        public void CarregarOrdens(Model.ConsultaOrdensNegocios modelNegocios)
        {
            ModelCollection<Model.ConsultaOrdensNegocios> retorno = null;
            ConsultarOrdensRequest request = new ConsultarOrdensRequest();
            try
            {
                this._comunicacaoOrdem = new Ordem(this.Session);
                switch (modelNegocios.TipoSituacao)
                {
                    case Model.Enum.TipoSituacaoOrdem.Casadas:
                        request.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.Casadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.CasadasParte:
                        request.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.CasadasParte;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.ExecutadasSemClientes:
                        request.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.ExecutadasSemClientes;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                        request.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.NaoCasadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.Todas:
                        request.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.Todas;
                        break;
                }
                request.Bolsa = modelNegocios.Bolsa;
                request.ApelidoCliente = modelNegocios.ApelidoCliente;
                request.DataPregao = Convert.ToDateTime(modelNegocios.DataPregao);
                request.Titulo = modelNegocios.Titulo;

                retorno = this._comunicacaoOrdem.ConsultarOrdens(request);

                if (retorno != null && retorno.Count > 0)
                {
                    this._view.ExibirOrdens(retorno);
                }
                else
                {
                    this._view.ExibirMensagem(Model.Enum.TipoConsultaOrdemNegocio.Ordens);
                    this._view.LimparGridOrdens();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region CarregarGridOrdensNegocios

        public void CarregarGridOrdensNegocios(Model.ConsultaOrdensNegocios model)
        {
            ModelCollection<Model.ConsultaOrdensNegocios> retornoOrdens = null;
            ModelCollection<Model.Negocio> retornoNegocios = null;
            ConsultarOrdensRequest requestOrdens = new ConsultarOrdensRequest();
            ConsultarNegociosRequest requestNegocios = new ConsultarNegociosRequest();
            try
            {
                this._comunicacaoNegocio = new Negocio(this.Session);
                this._comunicacaoOrdem = new Ordem(this.Session);

                #region Popular Request
                switch (model.TipoSituacao)
                {
                    case Model.Enum.TipoSituacaoOrdem.Casadas:
                        requestNegocios.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Casadas;
                        requestOrdens.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.Casadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.CasadasParte:
                        requestNegocios.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.CasadasParte;
                        requestOrdens.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.CasadasParte;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.ExecutadasSemClientes:
                        requestNegocios.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.ExecutadasSemClientes;
                        requestOrdens.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.ExecutadasSemClientes;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                        requestNegocios.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.NaoCasadas;
                        requestOrdens.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.NaoCasadas;
                        break;
                    case Model.Enum.TipoSituacaoOrdem.Todas:
                        requestNegocios.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Todas;
                        requestOrdens.TipoSituacaoCasamentoOrdem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.Todas;
                        break;
                }
                requestNegocios.Bolsa = model.Bolsa;
                requestNegocios.DataPregao = Convert.ToDateTime(model.DataPregao);
                requestNegocios.Titulo = new TituloRequest();
                requestNegocios.Titulo.Codigo = model.Titulo;

                requestOrdens.Bolsa = model.Bolsa;
                requestOrdens.ApelidoCliente = model.ApelidoCliente;
                requestOrdens.DataPregao = Convert.ToDateTime(model.DataPregao);
                requestOrdens.Titulo = model.Titulo;
                #endregion

                retornoNegocios = this._comunicacaoNegocio.ConsultarNegociosModel(requestNegocios);

                retornoOrdens = this._comunicacaoOrdem.ConsultarOrdens(requestOrdens);

                this._view.LimparGridOrdens();
                this._view.LimparGridNegocios();

                if ((retornoNegocios == null || retornoNegocios.Count == 0) && (retornoOrdens == null || retornoOrdens.Count == 0))
                {
                    this._view.ExibirMensagem(Model.Enum.TipoConsultaOrdemNegocio.Todas);
                }
                else
                {
                    if (retornoOrdens != null && retornoOrdens.Count > 0)
                        this._view.ExibirOrdens(retornoOrdens);

                    if (retornoNegocios != null && retornoNegocios.Count > 0)
                        this._view.ExibirNegocios(retornoNegocios);
                }

            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion


        #region CarregarOrdensNegocio

        public void CarregarOrdensNegocio(Model.ConsultaOrdensNegocios modelNegocios)
        {
            List<OrdemResponse> retorno = null;
            ConsultarOrdensNegocioRequest request = new ConsultarOrdensNegocioRequest();
            Model.Negocio negocioSelecionado = null;
            ModelCollection<Model.ConsultaOrdensNegocios> listModelOrdensNegocios = null;

            try
            {
                this._comunicacaoOrdem = new Ordem(this.Session);

                if (modelNegocios.NegocioSelecionado != null)
                {
                    negocioSelecionado = modelNegocios.NegocioSelecionado;
                    request.DataPregao = modelNegocios.DataPregao.Value;
                    if (negocioSelecionado.NumeroNegocio.HasValue)
                        request.NumeroNegocio = negocioSelecionado.NumeroNegocio.Value;
                    request.Titulo = negocioSelecionado.CodigoTitulo;
                    request.Bolsa = negocioSelecionado.Bolsa;
                    request.TipoNaturezaOperacao = (Communication.Bovespa.Ordens.Ordem.TipoNaturezaOperacao)negocioSelecionado.TipoNaturezaOperacao;
                }

                this._view.LimparGridOrdens();
                retorno = this._comunicacaoOrdem.ConsultarOrdensNegocio(request);

                if (retorno != null || retorno.Count > 0)
                {
                    listModelOrdensNegocios = TranslateOrdemResponseToModel(retorno);
                    this._view.ExibirOrdens(listModelOrdensNegocios);
                }
                else
                {
                    this._view.ExibirMensagem(Model.Enum.TipoConsultaOrdemNegocio.Ordens);
                    this._view.LimparGridOrdens();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        private static ModelCollection<Model.ConsultaOrdensNegocios> TranslateOrdemResponseToModel(List<Ordens.Communication.Bovespa.Ordens.Ordem.OrdemResponse> retorno)
        {
            ModelCollection<Model.ConsultaOrdensNegocios> listModelOrdensNegocios = new ModelCollection<Sinacor.UI.Bovespa.Ordens.Model.ConsultaOrdensNegocios>();

            foreach (OrdemResponse response in retorno)
            {
                Model.ConsultaOrdensNegocios model = new Sinacor.UI.Bovespa.Ordens.Model.ConsultaOrdensNegocios();

                #region PreencheModel
                model.ApelidoCliente = response.ApelidoCliente;
                model.Bolsa = response.Bolsa;
                model.Cambio = response.Cambio;
                model.CodigoBroker = response.CodigoBroker;
                model.CodigoCarteira = response.CodigoCarteira;
                model.CodigoCasamento = response.CodigoCasamento;
                model.CodigoCliente = response.CodigoCliente;
                model.CodigoISIN = response.CodigoISIN;
                model.CodigoNegocio = response.CodigoNegocio;
                model.CodigoUsuario = response.CodigoUsuario;
                model.CodigoUsuarioOrdem = response.CodigoUsuarioOrdem;
                model.ComplementoNomeCliente = response.ComplementoNomeCliente;
                model.DataOrdem = response.DataOrdem;
                model.DataPregao = response.DataPregao;
                model.DataValidade = response.DataValidade;
                model.DigitoCliente = response.DigitoCliente;
                model.HoraOrdem = response.HoraOrdem;
                model.IndicadorChamadaLog = response.IndicadorChamadaLog;
                model.IndicadorDesprezaSaldo = response.IndicadorDesprezaSaldo;
                model.IndicadorDistribuicao = response.IndicadorDistribuicao;
                model.IndicadorLiquidacao = response.IndicadorLiquidacao;
                model.IndicadorOrdemAbertaAdminCon = response.IndicadorOrdemAbertaAdminCon;
                model.IndicadorOrdemFilaCasamento = response.IndicadorOrdemFilaCasamento;
                model.IndicadorPessoaVinculada = response.IndicadorPessoaVinculada;
                model.IndicadorTipoDistribuicao = response.IndicadorTipoDistribuicao;
                model.NomeCliente = response.NomeCliente;
                model.NomeEmissorOrdem = response.NomeEmissorOrdem;
                model.LoginOperador = response.LoginOperador;
                model.Numero = response.NumeroOrdem;
                model.NumeroOrdem = response.NumeroOrdem;
                model.NumeroOrdemOriginal = response.NumeroOrdemOriginal;
                model.NumeroOrdemSequencia = response.NumeroOrdemSequencia.Value;
                model.ObservacaoOrdem = response.ObservacaoOrdem;
                model.Operador = response.Operador;
                model.PercentualReducaoAcrescimo = response.PercentualReducaoAcrescimo;
                model.Preco = response.Preco;
                model.Quantidade = response.Quantidade;
                model.QuantidadeAnexo4 = response.QuantidadeAnexo4;
                model.QuantidadeAnexo5 = response.QuantidadeAnexo5;
                model.QuantidadeCanceladaOferta = response.QuantidadeCanceladaOferta;
                model.QuantidadeCasada = response.QuantidadeCasada;
                model.Situacao = response.Situacao;
                model.TaxaFinanciamento = response.TaxaFinanciamento;
                model.TipoFax = response.TipoFax;
                model.Titulo = response.Titulo;
                model.ValorFinanciado = response.ValorFinanciado;
                model.ValorOrdem = response.ValorOrdem;
                model.VencimentoTermo = response.VencimentoTermo;
                model.Saldo = response.Saldo;

                #endregion

                #region TipoMercado
                if (response.TipoMercado.HasValue)
                {
                    switch (response.TipoMercado.Value)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Vista:
                            model.TipoMercado = Model.Enum.TipoMercado.Vista;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoCompra:
                            model.TipoMercado = Model.Enum.TipoMercado.OpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoVenda:
                            model.TipoMercado = Model.Enum.TipoMercado.OpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoCompra:
                            model.TipoMercado = Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoVenda:
                            model.TipoMercado = Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Fracionario:
                            model.TipoMercado = Model.Enum.TipoMercado.Fracionario;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Estruturado:
                            model.TipoMercado = Model.Enum.TipoMercado.Estruturado;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Leilao:
                            model.TipoMercado = Model.Enum.TipoMercado.Leilao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Termo:
                            model.TipoMercado = Model.Enum.TipoMercado.Termo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.LeilaoNaoCotados:
                            model.TipoMercado = Model.Enum.TipoMercado.LeilaoNaoCotados;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.Futuro:
                            model.TipoMercado = Model.Enum.TipoMercado.Futuro;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.VencimentoFuturo:
                            model.TipoMercado = Model.Enum.TipoMercado.VencimentoFuturo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.BOX:
                            model.TipoMercado = Model.Enum.TipoMercado.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.IntegralizacaoResgateCotas:
                            model.TipoMercado = Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado.CotasETF:
                            model.TipoMercado = Model.Enum.TipoMercado.CotasETF;
                            break;
                    }
                }
                #endregion

                #region NaturezaOperação
                switch (response.NaturezaOperacao)
                {
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoNaturezaOperacao.Compra
                        :
                        model.TipoNaturezaOperacao =
                            Model.Enum.TipoNaturezaOperacao.Compra;
                        break;
                    case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoNaturezaOperacao.Venda
                        :
                        model.TipoNaturezaOperacao =
                            Model.Enum.TipoNaturezaOperacao.Venda;
                        break;
                }
                #endregion

                #region TipoSituaçãoCasamentoOrdem
                switch (response.TipoSituacaoCasamentoOrdem)
                {
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.Todas
                        :
                        model.TipoSituacao = Model.Enum.TipoSituacaoOrdem.Todas;
                        break;
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.
                            Casadas:
                        model.TipoSituacao = Model.Enum.TipoSituacaoOrdem.Casadas;
                        break;
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.
                            NaoCasadas:
                        model.TipoSituacao = Model.Enum.TipoSituacaoOrdem.NaoCasadas;
                        break;
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.
                            CasadasParte:
                        model.TipoSituacao = Model.Enum.TipoSituacaoOrdem.CasadasParte;
                        break;
                    case
                        Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoSituacaoCasamento.
                            ExecutadasSemClientes:
                        model.TipoSituacao = Model.Enum.TipoSituacaoOrdem.ExecutadasSemClientes;
                        break;
                }
                #endregion

                foreach (Model.Enum.TipoOrdem tipoOrdem in response.TipoOrdem)
                {
                    model.TipoOrdem = tipoOrdem;
                    break; //paliativo quando houver dois itens - obter somente o primeiro item - esertorio - 200805091555 - ref issue ID_ABERTO_NO_MANTIS
                }
                listModelOrdensNegocios.Add(model);
            }
            return listModelOrdensNegocios;
        }

        #endregion

        #region CarregarNegociosOrdem

        public void CarregarNegociosOrdem(object selectedItem, DateTime dataPregao)
        {
            ModelCollection<Model.Negocio> retorno = null;
            Model.ConsultaOrdensNegocios ordemSelecionada = null;
            ConsultarNegociosOrdemRequest request = new ConsultarNegociosOrdemRequest();

            try
            {
                this._comunicacaoNegocio = new Negocio(this.Session);
                ordemSelecionada = (Model.ConsultaOrdensNegocios)selectedItem;

                if (ordemSelecionada != null)
                {
                    request.DataPregao = dataPregao;
                    request.DataOrdem = ordemSelecionada.DataOrdem.Value;
                    request.Titulo = ordemSelecionada.Titulo;
                    request.Bolsa = ordemSelecionada.Bolsa;
                    request.NumeroOrdem = ordemSelecionada.Numero;
                    request.NumeroOrdemSequencia = ordemSelecionada.NumeroOrdemSequencia;

                    #region TipoSituação
                    switch (ordemSelecionada.TipoSituacao)
                    {
                        case Model.Enum.TipoSituacaoOrdem.Todas:
                            request.Situacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Todas;
                            break;
                        case Model.Enum.TipoSituacaoOrdem.Casadas:
                            request.Situacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.Casadas;
                            break;
                        case Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                            request.Situacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.NaoCasadas;
                            break;
                        case Model.Enum.TipoSituacaoOrdem.CasadasParte:
                            request.Situacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.CasadasParte;
                            break;
                        case Model.Enum.TipoSituacaoOrdem.ExecutadasSemClientes:
                            request.Situacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoSituacaoCasamento.ExecutadasSemClientes;
                            break;
                    }
                    #endregion
                }
                this._view.LimparGridNegocios();
                retorno = _comunicacaoNegocio.ConsultarNegociosOrdemModel(request);

                if (retorno != null || retorno.Count > 0)
                {
                    this._view.ExibirNegocios(retorno);
                }
                else
                {
                    this._view.ExibirMensagem(Model.Enum.TipoConsultaOrdemNegocio.Negocios);
                    this._view.LimparGridNegocios();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region CarregaCalendario

        public void CarregaCalendario()
        {
            ModelCollection<Model.Calendario> retorno = null;
            try
            {
                this._comunicacaoCalendario = new Sinacor.UI.Bovespa.Ordens.Communication.Calendario(this.Session);
                retorno = this._comunicacaoCalendario.ConsultarCalendario();
                List<String> datas = new List<String>();
                if (retorno != null)
                {
                    for (int x =  0; x < retorno.Count; x++)
                        datas.Add(retorno[x].DataPregao.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));
                    this._view.ExibirCalendario(datas);
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region PegarNumeroOrdemLinhaGrid

        public int? PegarNumeroOrdemLinhaGrid(object LinhaGrid)
        {
            return ((Model.ConsultaOrdensNegocios)LinhaGrid).Numero;
        }

        #endregion

        #region SetColorGrid

        public void InformarStatusModelNegocio(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem status)
        {
            switch (status)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.Casadas:
                    this._view.InformarTipoSituacaoCasamentoCasadas();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.CasadasParte:
                    this._view.InformarTipoSituacaoCasamentoCasadasParte();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                    this._view.InformarTipoSituacaoCasamentoNaoCasadas();
                    break;
            }
        }

        public void InformarStatusModelOrdem(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem status)
        {
            switch (status)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.Casadas:
                    this._view.InformarTipoSituacaoCasamentoCasadas();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.CasadasParte:
                    this._view.InformarTipoSituacaoCasamentoCasadasParte();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.NaoCasadas:
                    this._view.InformarTipoSituacaoCasamentoNaoCasadas();
                    break;
            }
        }

        public void InformarOrdemCapa(Sinacor.UI.Bovespa.Ordens.Model.ConsultaOrdensNegocios model)
        {
            decimal? quantidadeCasada = 0;

            quantidadeCasada = model.QuantidadeCasada;


            if ((model.TipoSituacao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoSituacaoOrdem.CasadasParte) && (quantidadeCasada == 0))
            {
                this._view.InformarQuantidadeCasadaNula();
            }
        }

        #endregion
    }
}
